#include <stdio.h>
#include <string.h>

typedef char node;
#define key(A) (A)
#define exch(A, B) { node t = A; A = B; B = t; }
#define less(A, B) (key(A) < key(B))
#define PQ_SIZE 256

node pq[PQ_SIZE]; // tablica wezlow dla kolejki
int npq; // licznik elementow kolejki
int empty(); // zerowanie kolejki
void node_insert(node ); // wstawianie do kolejki
node get_max(); // wyjecie z kolejki
void pq_sort(node* , int , int ); // sortowanie pq

int main() 
{
  node v[256]; strcpy(v, "PQSORT");
  int n = strlen(v);
  pq_sort(v, 0, n - 1);
  //int i; for (i = 0; i < n; i++) printf("%c ", v[i]);
  return 0;
}

int empty()
{
  return npq == 0;
}

void node_insert(node a) 
{
  pq[npq++] = a;
}

node get_max() 
{
  int j; int max = 0;
  for (j = 1; j < npq; j++)
    if less(pq[max], pq[j]) max = j;
  exch(pq[max], pq[npq-1]);
  return pq[--npq];
}

void pq_sort(node a[], int l, int r)
{
  int k;
  for (k = l; k <= r; k++) node_insert(a[k]);
  for (k = r; k >= l; k--) a[k] = get_max();
}

